home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1995 August: Tool Chest / Dev.CD Aug 95 TC / Dev.CD Aug 95 TC.toast / New System Software Extensions / QuickDraw™ 3D 1.0 / Development / Interfaces / QD3DPick.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-06-02  |  6.9 KB  |  258 lines  |  [TEXT/MPS ]

  1. /******************************************************************************
  2.  **                                                                             **
  3.  **     Module:        QD3DPick.h                                                 **
  4.  **                                                                          **
  5.  **                                                                          **
  6.  **     Purpose:     Public picking routines                                  **
  7.  **                                                                          **
  8.  **                                                                          **
  9.  **                                                                          **
  10.  **     Copyright (C) 1992-1995 Apple Computer, Inc.  All rights reserved.     **
  11.  **                                                                          **
  12.  **                                                                          **
  13.  *****************************************************************************/
  14. #ifndef QD3DPick_h
  15. #define QD3DPick_h
  16.  
  17. #ifndef QD3D_h
  18. #include "QD3D.h"
  19. #endif  /*  QD3D_h  */
  20.  
  21. #if PRAGMA_ONCE
  22.     #pragma once
  23. #endif
  24.  
  25. #include "QD3DStyle.h"
  26. #include "QD3DGeometry.h"
  27.  
  28. #ifdef __cplusplus
  29. extern "C" {
  30. #endif  /*  __cplusplus  */
  31.  
  32.  
  33. /*****************************************************************************
  34.  **                                                                            **
  35.  **                            Mask bits for hit information                     **
  36.  **                                                                            **
  37.  *****************************************************************************/
  38.  
  39. typedef enum TQ3PickDetailMasks {
  40.     kQ3PickDetailNone                    = 0,
  41.     kQ3PickDetailMaskPickID             = 1 << 0,
  42.     kQ3PickDetailMaskPath                 = 1 << 1,
  43.     kQ3PickDetailMaskObject             = 1 << 2,
  44.     kQ3PickDetailMaskLocalToWorldMatrix    = 1 << 3,
  45.     kQ3PickDetailMaskXYZ                 = 1 << 4,
  46.     kQ3PickDetailMaskDistance             = 1 << 5,
  47.     kQ3PickDetailMaskNormal             = 1 << 6,
  48.     kQ3PickDetailMaskShapePart             = 1 << 7
  49. } TQ3PickDetailMasks;
  50.  
  51. typedef unsigned long TQ3PickDetail;
  52.  
  53.  
  54. /******************************************************************************
  55.  **                                                                             **
  56.  **                                Hitlist sorting                                 **
  57.  **                                                                             **
  58.  *****************************************************************************/
  59.  
  60. typedef enum TQ3PickSort {
  61.     kQ3PickSortNone,
  62.     kQ3PickSortNearToFar,
  63.     kQ3PickSortFarToNear
  64. } TQ3PickSort;
  65.  
  66.  
  67. /******************************************************************************
  68.  **                                                                             **
  69.  **                    Data structures to set up the pick object                 **
  70.  **                                                                             **
  71.  *****************************************************************************/
  72.  
  73. #define kQ3ReturnAllHits        0
  74.  
  75. typedef struct TQ3PickData {
  76.     TQ3PickSort            sort;
  77.     TQ3PickDetail        mask;
  78.     unsigned long        numHitsToReturn;
  79. } TQ3PickData;
  80.  
  81. typedef struct TQ3WindowPointPickData {
  82.     TQ3PickData            data;
  83.     TQ3Point2D            point;
  84.     float                vertexTolerance;
  85.     float                edgeTolerance;
  86. } TQ3WindowPointPickData;
  87.  
  88. typedef struct TQ3WindowRectPickData {
  89.     TQ3PickData            data;
  90.     TQ3Area                rect;
  91. } TQ3WindowRectPickData;
  92.  
  93.  
  94. /******************************************************************************
  95.  **                                                                             **
  96.  **                                    Hit data                                 **
  97.  **                                                                             **
  98.  *****************************************************************************/
  99.  
  100. typedef struct TQ3HitPath {
  101.     TQ3GroupObject            rootGroup;
  102.     unsigned long             depth;
  103.     TQ3GroupPosition        *positions;
  104. } TQ3HitPath;
  105.  
  106. typedef struct TQ3HitData {
  107.     TQ3PickParts            part;
  108.     TQ3PickDetail            validMask;
  109.     unsigned long             pickID;
  110.     TQ3HitPath                path;
  111.     TQ3Object                object;
  112.     TQ3Matrix4x4            localToWorldMatrix;
  113.     TQ3Point3D                xyzPoint;
  114.     float                    distance;
  115.     TQ3Vector3D                normal;
  116.     TQ3ShapePartObject        shapePart;
  117. } TQ3HitData;
  118.  
  119.  
  120. /******************************************************************************
  121.  **                                                                             **
  122.  **                                Pick class methods                             **
  123.  **                                                                             **
  124.  *****************************************************************************/
  125.  
  126. QD3D_EXPORT TQ3ObjectType Q3Pick_GetType(
  127.     TQ3PickObject        pick);
  128.  
  129. QD3D_EXPORT TQ3Status Q3Pick_GetData(
  130.     TQ3PickObject        pick,
  131.     TQ3PickData            *data);
  132.  
  133. QD3D_EXPORT TQ3Status Q3Pick_SetData(
  134.     TQ3PickObject        pick,
  135.     const TQ3PickData    *data);
  136.     
  137. QD3D_EXPORT TQ3Status Q3Pick_GetVertexTolerance(
  138.     TQ3PickObject        pick,
  139.     float                *vertexTolerance);
  140.     
  141. QD3D_EXPORT TQ3Status Q3Pick_GetEdgeTolerance(
  142.     TQ3PickObject        pick,
  143.     float                *edgeTolerance);
  144.     
  145. QD3D_EXPORT TQ3Status Q3Pick_SetVertexTolerance(
  146.     TQ3PickObject        pick,
  147.     float                vertexTolerance);
  148.     
  149. QD3D_EXPORT TQ3Status Q3Pick_SetEdgeTolerance(
  150.     TQ3PickObject        pick,
  151.     float                edgeTolerance);
  152.  
  153. QD3D_EXPORT TQ3Status Q3Pick_GetNumHits(
  154.     TQ3PickObject        pick,
  155.     unsigned long        *numHits);
  156.     
  157. QD3D_EXPORT TQ3Status Q3Pick_GetHitData(
  158.     TQ3PickObject        pick,
  159.     unsigned long        index,
  160.     TQ3HitData            *hitData);
  161.  
  162. QD3D_EXPORT TQ3Status Q3Hit_EmptyData(
  163.     TQ3HitData            *hitData);
  164.  
  165. QD3D_EXPORT TQ3Status Q3Pick_EmptyHitList(
  166.     TQ3PickObject        pick);
  167.  
  168.     
  169. /******************************************************************************
  170.  **                                                                             **
  171.  **                            Window point pick methods                         **
  172.  **                                                                             **
  173.  *****************************************************************************/
  174.  
  175. QD3D_EXPORT TQ3PickObject Q3WindowPointPick_New(
  176.     const TQ3WindowPointPickData    *data);
  177.  
  178. QD3D_EXPORT TQ3Status Q3WindowPointPick_GetPoint(
  179.     TQ3PickObject                    pick,
  180.     TQ3Point2D                        *point);
  181.  
  182. QD3D_EXPORT TQ3Status Q3WindowPointPick_SetPoint(
  183.     TQ3PickObject                    pick,
  184.     const TQ3Point2D                *point);
  185.  
  186. QD3D_EXPORT TQ3Status Q3WindowPointPick_GetData(
  187.     TQ3PickObject                    pick,
  188.     TQ3WindowPointPickData            *data);
  189.  
  190. QD3D_EXPORT TQ3Status Q3WindowPointPick_SetData(
  191.     TQ3PickObject                    pick,
  192.     const TQ3WindowPointPickData    *data);
  193.  
  194.  
  195. /******************************************************************************
  196.  **                                                                             **
  197.  **                            Window rect pick methods                         **
  198.  **                                                                             **
  199.  *****************************************************************************/
  200.  
  201. QD3D_EXPORT TQ3PickObject Q3WindowRectPick_New(
  202.     const TQ3WindowRectPickData    *data);
  203.  
  204. QD3D_EXPORT TQ3Status Q3WindowRectPick_GetRect(
  205.     TQ3PickObject                pick,
  206.     TQ3Area                        *rect);
  207.  
  208. QD3D_EXPORT TQ3Status Q3WindowRectPick_SetRect(
  209.     TQ3PickObject                pick,
  210.     const TQ3Area                *rect);
  211.  
  212. QD3D_EXPORT TQ3Status Q3WindowRectPick_GetData(
  213.     TQ3PickObject                pick,
  214.     TQ3WindowRectPickData        *data);
  215.  
  216. QD3D_EXPORT TQ3Status Q3WindowRectPick_SetData(
  217.     TQ3PickObject                pick,
  218.     const TQ3WindowRectPickData    *data);
  219.  
  220.  
  221. /******************************************************************************
  222.  **                                                                             **
  223.  **                                Shape Part methods                             **
  224.  **                                                                             **
  225.  *****************************************************************************/
  226.  
  227. QD3D_EXPORT TQ3ObjectType Q3ShapePart_GetType(
  228.     TQ3ShapePartObject            shapePartObject);
  229.  
  230. QD3D_EXPORT TQ3ObjectType Q3MeshPart_GetType(
  231.     TQ3MeshPartObject            meshPartObject);
  232.  
  233. QD3D_EXPORT TQ3Status Q3ShapePart_GetShape(
  234.     TQ3ShapePartObject            shapePartObject,
  235.     TQ3ShapeObject                *shapeObject);
  236.  
  237. QD3D_EXPORT TQ3Status Q3MeshPart_GetComponent(
  238.     TQ3MeshPartObject            meshPartObject,
  239.     TQ3MeshComponent            *component);
  240.  
  241. QD3D_EXPORT TQ3Status Q3MeshFacePart_GetFace(
  242.     TQ3MeshFacePartObject        meshFacePartObject,
  243.     TQ3MeshFace                    *face);
  244.  
  245. QD3D_EXPORT TQ3Status Q3MeshEdgePart_GetEdge(
  246.     TQ3MeshEdgePartObject        meshEdgePartObject,
  247.     TQ3MeshEdge                    *edge);
  248.  
  249. QD3D_EXPORT TQ3Status Q3MeshVertexPart_GetVertex(
  250.     TQ3MeshVertexPartObject        meshVertexPartObject,
  251.     TQ3MeshVertex                *vertex);
  252.  
  253. #ifdef __cplusplus
  254. }
  255. #endif  /*  __cplusplus  */
  256.  
  257. #endif  /*  QD3DPick_h  */
  258.